package org.dousb.doupicture.domain.user.service;

import org.dousb.doupicture.domain.user.entity.Space;
import org.dousb.doupicture.domain.user.entity.User;
import org.dousb.doupicture.interfaces.dto.analyze.SpaceTopNAnalzeRequest;
import org.dousb.doupicture.interfaces.dto.analyze.SpaceUsageAnalyzeRequest;
import org.dousb.doupicture.interfaces.dto.analyze.SpaceUserAnalyzeRequest;
import org.dousb.doupicture.interfaces.vo.space.analyze.*;

import java.util.List;

public interface SpaceAnalyzeDomainService {

    /**
     * 获取空间使用分析
     *
     * @param spaceUsageAnalyzeRequest 空间分析请求
     * @param loginUser                登录用户
     * @return 空间使用分析响应
     */
    SpaceUsageAnalyzeResponse getSpaceUsageAnalyze(SpaceUsageAnalyzeRequest spaceUsageAnalyzeRequest, User loginUser);

    /**
     * 获取空间分类分析
     *
     * @param spaceUsageAnalyzeRequest 空间分析请求
     * @param loginUser                登录用户
     * @return 空间分类分析响应列表
     */
    List<SpaceCategoryAnalyzeResponse> getSpaceCategoryAnalyze(SpaceUsageAnalyzeRequest spaceUsageAnalyzeRequest, User loginUser);

    /**
     * 获取空间标签分析
     *
     * @param spaceUsageAnalyzeRequest 空间分析请求
     * @param loginUser                登录用户
     * @return 空间标签分析响应列表
     */
    List<SpaceTagAnalyzeResponse> getSpaceTagAnalyze(SpaceUsageAnalyzeRequest spaceUsageAnalyzeRequest, User loginUser);

    /**
     * 获取空间大小分析
     *
     * @param spaceUsageAnalyzeRequest 空间分析请求
     * @param loginUser                登录用户
     * @return 空间大小分析响应
     */
    List<SpaceSizeAnalyzeResponse> getSpaceSizeAnalyze(SpaceUsageAnalyzeRequest spaceUsageAnalyzeRequest, User loginUser);

    /**
     * 获取空间用户分析
     *
     * @param spaceUserAnalyzeRequest 空间分析请求
     * @param loginUser               登录用户
     * @return 空间用户分析响应列表
     */
    List<SpaceUserAnalyzeResponse> getSpaceUserAnalyze(SpaceUserAnalyzeRequest spaceUserAnalyzeRequest, User loginUser);

    /**
     * 获取空间TopN分析
     *
     * @param spaceTopNAnalzeRequest 空间TopN分析请求
     * @param loginUser              登录用户
     * @return 空间TopN分析响应列表
     */
    List<Space> getSpaceTopNAnalyze(SpaceTopNAnalzeRequest spaceTopNAnalzeRequest, User loginUser);
}

